package initialize

import (
	//"encoding/json"
	"a_plus_station/global"
	"fmt"
	"github.com/fsnotify/fsnotify"
	"path/filepath"
	//"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"go.uber.org/zap"
)

// 环境的配置
func GetEnvInfo(env string) bool {
	viper.AutomaticEnv()
	return viper.GetBool(env)
}

func InitConfig(path string) {
	// 1. 从配置文件中读取对应的配置
	debug := GetEnvInfo("debug")

	configFileName := filepath.Join(path, "config-pro.yaml")
	if debug == true {
		configFileName = filepath.Join(path, "config-debug.yaml")
	}

	// 创建对象 读取文件
	v := viper.New()
	// 设置读取文件的路径
	v.SetConfigFile(configFileName)
	// 读取文件
	if err := v.ReadInConfig(); err != nil {
		panic(err)
	}

	// 反序列为struct
	err := v.Unmarshal(global.ServerConfig)
	if err != nil {
		return
	}
	fmt.Println(global.ServerConfig)
	//name := v.Get("name")
	zap.S().Infof("配置信息：%+v", *global.ServerConfig)
	//fmt.Println(GetEnvInfo("GO111MODULE"))

	// 动态监控变化
	v.WatchConfig()
	v.OnConfigChange(func(e fsnotify.Event) {
		zap.S().Infof("配置信息产生变化：%v", global.ServerConfig)
	})

	// 2. nacos读取配置文件
	//debug := GetEnvInfo("debug")
	//
	//configFilePrefix := "config"
	//configFileName := fmt.Sprintf("a_plus_station/%s-pro.yaml",configFilePrefix)
	//if debug == false {
	//	configFileName = fmt.Sprintf("a_plus_station/%s-debug.yaml",configFilePrefix)
	//}
	//// 创建对象 读取文件
	//v := viper.New()
	//// 设置读取文件的路径
	//v.SetConfigFile(configFileName)
	//// 读取文件
	//if err := v.ReadInConfig();err != nil {
	//	panic(err)
	//}
	//
	//// 反序列为struct
	//err := v.Unmarshal(&global.NacosConfig)
	//if err != nil {
	//	return
	//}
	////fmt.Println(global.ServerConfig)
	////name := v.Get("name")
	//zap.S().Infof("配置信息：%+v",global.NacosConfig)
	////fmt.Println(GetEnvInfo("GO111MODULE"))
	//
	//// 动态监控变化
	////v.WatchConfig()
	////v.OnConfigChange(func(e fsnotify.Event) {
	////	zap.S().Infof("配置信息产生变化：%v",global.ServerConfig)
	////})
	//serverConfigs := []constant.ServerConfig{
	//	{
	//		IpAddr:      global.NacosConfig.Host,
	//		Port: global.NacosConfig.Port,
	//	},
	//}

	//clientConfig := constant.ClientConfig{
	//	NamespaceId:         global.NacosConfig.NameSpace, // 如果需要支持多namespace，我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时，此处填空字符串。
	//	TimeoutMs:           5000,
	//	NotLoadCacheAtStart: true,
	//	LogDir:              "tmp/nacos/log",
	//	CacheDir:            "tmp/nacos/cache",
	//	LogLevel:            "debug",
	//}
	//
	//// 创建动态配置客户端
	//ConfigClient, err := clients.CreateConfigClient(map[string]interface{}{
	//	"serverConfigs": serverConfigs,
	//	"clientConfig":  clientConfig,
	//})
	//if err != nil {
	//	panic(err.Error())
	//}
	//
	//content, err := ConfigClient.GetConfig(vo.ConfigParam{
	//	DataId: global.NacosConfig.DataId,
	//	Group:  global.NacosConfig.Group})
	//
	//if err != nil {
	//	panic(err.Error())
	//}
	//
	////serviceConfig := config.ServerConfig{}
	//// 将一个json的字符转换成struct,需要设置这个struct tag
	//err = json.Unmarshal([]byte(content), &global.ServerConfig)
	//if err != nil {
	//	zap.S().Infof("nacos配置信息读取失败：%s",err.Error())
	//	return
	//}
	//fmt.Println(*global.ServerConfig)
}
